﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CAGFIP.DataAccess.DataSetTableAdapters;
using CAGFIP.DataAccess;

namespace CAGFIP.Edicao
{
    public class PerguntaDAODebug : IPerguntaDAO
    {
        #region Fields

        private Dictionary<int, Pergunta> perguntas;
        private static readonly PerguntaDAODebug instance = new PerguntaDAODebug();

        private int cadastroId = 5000;

        #endregion
        
        #region Constructors

        private PerguntaDAODebug() { }

        #endregion

        #region Properties

        public static PerguntaDAODebug Instance
        {
            get { return instance; }
        }

        private Dictionary<int, Pergunta> Perguntas
        {
            get
            {
                if (this.perguntas == null)
                {
                    //TODO: fill with preset debug assuntos
                    var perguntas = new Dictionary<int, Pergunta>();
                    perguntas.Add(0, new Pergunta(0, 0, "pergunta 1 esporte", "cor1", new string[] { "inc1", "inc2", "inc3", "inc4" }));
                    perguntas.Add(1, new Pergunta(1, 0, "pergunta 2 esporte", "cor1", new string[] { "inc1", "inc2", "inc3", "inc4" }));
                    perguntas.Add(2, new Pergunta(2, 1, "pergunta 1 cinema", "cor1", new string[] { "inc1", "inc2", "inc3", "inc4" }));
                    perguntas.Add(3, new Pergunta(3, 1, "pergunta 2 cinema", "cor1", new string[] { "inc1", "inc2", "inc3", "inc4" }));

                    this.perguntas = perguntas;
                }
                return this.perguntas;
            }
        }

        #endregion

        #region Methods

        public void AlterarPergunta(Pergunta pergunta)
        {
            Perguntas[pergunta.Id] = pergunta;
        }

        public void CadastrarPergunta(Pergunta pergunta)
        {
            int id = pergunta.Id;
            if (id == -1)
                id = cadastroId++;
            Perguntas.Add(id, pergunta);
        }

        public void RemoverPergunta(int idPergunta)
        {
            Perguntas.Remove(idPergunta);
        }

        public Pergunta VisualizarPergunta(int idPergunta)
        {
            var p = Perguntas[idPergunta];
            return new Pergunta(p.Id, p.IdAssunto, p.Enunciado, p.AlternativaCorreta, p.AlterntivasIncorretas);
        }

        public List<Pergunta> VisualizarPerguntas()
        {
            var list = new List<Pergunta>();

            foreach (var p in Perguntas.Values)
                list.Add(new Pergunta(p.Id, p.IdAssunto, p.Enunciado, p.AlternativaCorreta, p.AlterntivasIncorretas));

            return list;
        }

        public int BuscarQtdePerguntas(List<int> idAssuntos)
        {
            int qtde = 0;

            foreach (var p in Perguntas.Values)
                if (idAssuntos.Contains(p.IdAssunto))
                    qtde++;

            return qtde;
        }

        public List<Pergunta> VisualizarPerguntas(List<int> idAssuntos)
        {
            var list = new List<Pergunta>();

            foreach (var p in Perguntas.Values)
                if (idAssuntos.Contains(p.IdAssunto))
                    list.Add(new Pergunta(p.Id, p.IdAssunto, p.Enunciado, p.AlternativaCorreta, p.AlterntivasIncorretas));

            return list;         
        }

        public DataSet.PerguntaDataTable VisualizarPerguntaDataSet()
        {
            return new DataSet.PerguntaDataTable();
        }

        #endregion
    }
}
